// Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/*!
 * @file FallDownState.h
 * This header file contains the declaration of the described types in the IDL
 * file.
 *
 * This file was generated by the tool fastddsgen.
 */

#ifndef _FAST_DDS_GENERATED_BOOSTER_INTERFACE_MSG_FALLDOWNSTATE_H_
#define _FAST_DDS_GENERATED_BOOSTER_INTERFACE_MSG_FALLDOWNSTATE_H_

#include <array>
#include <bitset>
#include <cstdint>
#include <fastcdr/cdr/fixed_size_string.hpp>
#include <fastcdr/xcdr/external.hpp>
#include <fastcdr/xcdr/optional.hpp>
#include <map>
#include <string>
#include <vector>

// ------------------------------ Pub Sub Type Start
// ----------------------------
#include <fastdds/rtps/common/InstanceHandle.h>
#include <fastdds/rtps/common/SerializedPayload.h>
#include <fastrtps/utils/md5.h>

#include <fastdds/dds/core/policy/QosPolicies.hpp>
#include <fastdds/dds/topic/TopicDataType.hpp>

#if !defined(GEN_API_VER) || (GEN_API_VER != 2)
#error \
    Generated FallDownState is not compatible with current installed Fast DDS. Please, regenerate it with fastddsgen.
#endif  // GEN_API_VER

// ------------------------------ Pub Sub Type End ----------------------------

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#define eProsima_user_DllExport __declspec(dllexport)
#else
#define eProsima_user_DllExport
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define eProsima_user_DllExport
#endif  // _WIN32

#if defined(_WIN32)
#if defined(EPROSIMA_USER_DLL_EXPORT)
#if defined(FALLDOWNSTATE_SOURCE)
#define FALLDOWNSTATE_DllAPI __declspec(dllexport)
#else
#define FALLDOWNSTATE_DllAPI __declspec(dllimport)
#endif  // FALLDOWNSTATE_SOURCE
#else
#define FALLDOWNSTATE_DllAPI
#endif  // EPROSIMA_USER_DLL_EXPORT
#else
#define FALLDOWNSTATE_DllAPI
#endif  // _WIN32

namespace eprosima {
namespace fastcdr {
class Cdr;
class CdrSizeCalculator;
}  // namespace fastcdr
}  // namespace eprosima

namespace booster_interface {

namespace msg {

/*!
 * @brief This class represents the enumeration FallDownStateType defined by the
 * user in the IDL file.
 * @ingroup FallDownState
 */
enum FallDownStateType : uint32_t {
  IS_READY,
  IS_FALLING,
  HAS_FALLEN,
  IS_GETTING_UP
};

/*!
 * @brief This class represents the structure FallDownState defined by the user
 * in the IDL file.
 * @ingroup FallDownState
 */
class FallDownState : public eprosima::fastdds::dds::TopicDataType {
 public:
  /*!
   * @brief Copy constructor.
   * @param x Reference to the object booster_interface::msg::FallDownState that
   * will be copied.
   */
  eProsima_user_DllExport FallDownState(const FallDownState& x);

  /*!
   * @brief Move constructor.
   * @param x Reference to the object booster_interface::msg::FallDownState that
   * will be copied.
   */
  eProsima_user_DllExport FallDownState(FallDownState&& x) noexcept;

  /*!
   * @brief Copy assignment.
   * @param x Reference to the object booster_interface::msg::FallDownState that
   * will be copied.
   */
  eProsima_user_DllExport FallDownState& operator=(const FallDownState& x);

  /*!
   * @brief Move assignment.
   * @param x Reference to the object booster_interface::msg::FallDownState that
   * will be copied.
   */
  eProsima_user_DllExport FallDownState& operator=(FallDownState&& x) noexcept;

  /*!
   * @brief Comparison operator.
   * @param x booster_interface::msg::FallDownState object to compare.
   */
  eProsima_user_DllExport bool operator==(const FallDownState& x) const;

  /*!
   * @brief Comparison operator.
   * @param x booster_interface::msg::FallDownState object to compare.
   */
  eProsima_user_DllExport bool operator!=(const FallDownState& x) const;

  /*!
   * @brief This function sets a value in member fall_down_state
   * @param _fall_down_state New value for member fall_down_state
   */
  eProsima_user_DllExport void fall_down_state(
      booster_interface::msg::FallDownStateType _fall_down_state);

  /*!
   * @brief This function returns the value of member fall_down_state
   * @return Value of member fall_down_state
   */
  eProsima_user_DllExport booster_interface::msg::FallDownStateType
  fall_down_state() const;

  /*!
   * @brief This function returns a reference to member fall_down_state
   * @return Reference to member fall_down_state
   */
  eProsima_user_DllExport booster_interface::msg::FallDownStateType&
  fall_down_state();

  /*!
   * @brief This function sets a value in member is_recovery_available
   * @param _is_recovery_available New value for member is_recovery_available
   */
  eProsima_user_DllExport void is_recovery_available(
      bool _is_recovery_available);

  /*!
   * @brief This function returns the value of member is_recovery_available
   * @return Value of member is_recovery_available
   */
  eProsima_user_DllExport bool is_recovery_available() const;

  /*!
   * @brief This function returns a reference to member is_recovery_available
   * @return Reference to member is_recovery_available
   */
  eProsima_user_DllExport bool& is_recovery_available();

 private:
  booster_interface::msg::FallDownStateType m_fall_down_state{
      booster_interface::msg::IS_READY};
  bool m_is_recovery_available{false};

 public:
  typedef FallDownState type;

  eProsima_user_DllExport FallDownState();

  eProsima_user_DllExport ~FallDownState() override;

  eProsima_user_DllExport bool serialize(
      void* data,
      eprosima::fastrtps::rtps::SerializedPayload_t* payload) override {
    return serialize(data, payload,
                     eprosima::fastdds::dds::DEFAULT_DATA_REPRESENTATION);
  }

  eProsima_user_DllExport bool serialize(
      void* data, eprosima::fastrtps::rtps::SerializedPayload_t* payload,
      eprosima::fastdds::dds::DataRepresentationId_t data_representation)
      override;

  eProsima_user_DllExport bool deserialize(
      eprosima::fastrtps::rtps::SerializedPayload_t* payload,
      void* data) override;

  eProsima_user_DllExport std::function<uint32_t()> getSerializedSizeProvider(
      void* data) override {
    return getSerializedSizeProvider(
        data, eprosima::fastdds::dds::DEFAULT_DATA_REPRESENTATION);
  }

  eProsima_user_DllExport std::function<uint32_t()> getSerializedSizeProvider(
      void* data,
      eprosima::fastdds::dds::DataRepresentationId_t data_representation)
      override;

  eProsima_user_DllExport bool getKey(
      void* data, eprosima::fastrtps::rtps::InstanceHandle_t* ihandle,
      bool force_md5 = false) override;

  eProsima_user_DllExport void* createData() override;

  eProsima_user_DllExport void deleteData(void* data) override;

#ifdef TOPIC_DATA_TYPE_API_HAS_IS_BOUNDED
  eProsima_user_DllExport inline bool is_bounded() const override {
    return false;
  }

#endif  // TOPIC_DATA_TYPE_API_HAS_IS_BOUNDED

#ifdef TOPIC_DATA_TYPE_API_HAS_IS_PLAIN
  eProsima_user_DllExport inline bool is_plain() const override {
    return false;
  }

  eProsima_user_DllExport inline bool is_plain(
      eprosima::fastdds::dds::DataRepresentationId_t data_representation)
      const override {
    static_cast<void>(data_representation);
    return false;
  }

#endif  // TOPIC_DATA_TYPE_API_HAS_IS_PLAIN

#ifdef TOPIC_DATA_TYPE_API_HAS_CONSTRUCT_SAMPLE
  eProsima_user_DllExport inline bool construct_sample(
      void* memory) const override {
    static_cast<void>(memory);
    return false;
  }

#endif  // TOPIC_DATA_TYPE_API_HAS_CONSTRUCT_SAMPLE

  MD5 m_md5;
  unsigned char* m_keyBuffer;
};

}  // namespace msg

}  // namespace booster_interface

#endif  // _FAST_DDS_GENERATED_BOOSTER_INTERFACE_MSG_FALLDOWNSTATE_H_
